package co.edu.udea.iw.tusanimes.dao.impl;

import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;
import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

import co.edu.udea.iw.tusanimes.dao.GeneroDao;
import co.edu.udea.iw.tusanimes.dao.exception.DAOException;
import co.edu.udea.iw.tusanimes.dto.Genero;


/**
 * Implementaci�n de la Interfaz GeneroDao
 * 
 * @author Camila Naranjo
 * @version 1.0
 * 
 */
public class GeneroDaoImpl extends HibernateDaoSupport implements GeneroDao {

	/**
	 * 
	 * M�todo obtener videos, para obtener la lista de videos que pertenezcan a
	 * una serie en la tabla de videos
	 * 
	 * @return List<Genero> Listado de los generos.
	 * @throws DAOException
	 */
	@SuppressWarnings("unchecked")
	@Override
	public List<Genero> ObtenerGeneros() throws DAOException {
		List<Genero> generos =null;
		try {
			Session sesion = getSession();
			generos = (List<Genero>) sesion.createCriteria(Genero.class).list();
		} catch (HibernateException e) {
			throw new DAOException();
		}

		return generos;
	}

	/**
	 * M�todo para crear una nueva noticia a la tabla de Noticias
	 * 
	 * @param generoNuevo
	 *            Genero a guardar.
	 * @return Genero Genero creado.
	 * @throws DAOException
	 * 
	 */
	@Override
	public Genero nuevoGenero(Genero generoNuevo) throws DAOException {
		Session session = null;
		Transaction tx = null;

		try {
			session = getSession();
			tx = session.beginTransaction();

			session.save(generoNuevo);
			tx.commit();
		} catch (HibernateException e) {
			throw new DAOException();
		}
		return generoNuevo;
	}

	/**
	 * M�todo eliminar un genero en la tabla de Generos
	 * 
	 * @param genero
	 *            Genero a eliminar.
	 * @throws DAOException
	 * 
	 */

	@Override
	public void eliminarGenero(String genero) throws DAOException {
		Session session = null;
		Transaction tx = null;
		Query query = null;
		String sql;
		try {
			session = getSession();
			tx = session.beginTransaction();
			sql = "delete from Genero where genero= :genero";
			query = session.createQuery(sql);

			query.setString("genero", genero);
			query.executeUpdate();
			tx.commit();
		} catch (HibernateException e) {
			throw new DAOException();
		}

	}

	/**
	 * M�todo buscar un genero en la tabla de Generos
	 * 
	 * @param generoABuscar
	 *            Nombre del genero.
	 * @return Genero Genero encontrado.
	 * @throws DAOException
	 * 
	 */
	@Override
	public Genero buscarGenero(String generoABuscar) throws DAOException {
		Genero genero = null;
		try {
			Session sesion = getSession();
			genero = (Genero) sesion.createCriteria(Genero.class)
					.add(Restrictions.eq("genero", generoABuscar))
					.uniqueResult();
		} catch (HibernateException e) {
			throw new DAOException();
		}
		return genero;
	}

}
